package com.bee.baselibrary.base;

import android.app.Activity;
import android.app.AlertDialog;
import android.app.Dialog;
import android.content.DialogInterface;
import android.content.Intent;
import android.os.Build;
import android.os.Bundle;
import android.provider.Settings;

import androidx.annotation.LayoutRes;
import androidx.appcompat.app.AppCompatActivity;
import androidx.core.content.ContextCompat;
import butterknife.ButterKnife;

import android.view.View;

import com.bee.baselibrary.R;
import com.bee.baselibrary.utils.AppManager;
import com.bee.baselibrary.utils.KeyboardUtils;
import com.bee.baselibrary.utils.T;
import com.bee.baselibrary.weight.LoadingDialog;
import com.jaeger.library.StatusBarUtil;
import com.qiyukf.nimlib.sdk.NimIntent;
import com.qiyukf.unicorn.api.ConsultSource;
import com.qiyukf.unicorn.api.Unicorn;
import com.qiyukf.unicorn.api.YSFUserInfo;
import com.scwang.smartrefresh.layout.footer.ClassicsFooter;



/**
 * Created by lihao on 2017/8/1.
 */
public abstract class BaseActivity extends AppCompatActivity implements BaseView {


    public LoadingDialog dialog;
    public static Activity context;
    public Intent intent;
    public static ColumnValue value;
    public int page = 0;


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);


        ClassicsFooter.REFRESH_FOOTER_NOTHING = "- 我也是有底线的 -";
        if (getContentViewId() != 0) {
            setContentView(getContentViewId());
        }
        AppManager.getAppManager().addActivity(this);
        ButterKnife.bind(this);
        dialog = new LoadingDialog(this, R.style.DialogStyle);
        context = this;
        intent = new Intent();
        value = new ColumnValue(this);


        parseIntent(getIntent());
        initView();
        initData();


    }


    /**
     * 获取布局ID
     * @return
     */
    protected abstract int getContentViewId();

    /**
     * 初始化数据
     */
    protected abstract void initData();

    /**
     * 初始化控件设置
     */
    protected abstract void initView();

    @Override
    public void setContentView(@LayoutRes int layoutResID) {
        super.setContentView(layoutResID);
        setStatusBar(R.color.colorPrimary);
    }

    /**
     * 更改界面状态栏则直接重写此方法
     *
     * @param color
     */
    protected void setStatusBar(int color) {
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
            StatusBarUtil.setColor(this, ContextCompat.getColor(getApplicationContext(), color), 0);
            setDarkStatusIcon(true);
        } else {
            StatusBarUtil.setColor(this, ContextCompat.getColor(getApplicationContext(), color), 30);
        }

    }

    /**
     * 是否使用深色状态栏
     *
     * @param bDark
     */
    protected void setDarkStatusIcon(boolean bDark) {
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
            View decorView = getWindow().getDecorView();
            if (decorView != null) {
                int vis = decorView.getSystemUiVisibility();
                if (bDark) {
                    vis |= View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR;
                } else {
                    vis &= ~View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR;
                }
                decorView.setSystemUiVisibility(vis);
            }
        }
    }


    @Override
    public void showToast(String msg) {
        T.showShort(context, msg);
    }

    @Override
    public void showToast(int msgId) {
        T.showShort(context, getString(msgId));
    }

    @Override
    public void showDialog() {
        dialog.show();
    }

    @Override
    public void dismissDialog() {
        dialog.dismiss();
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        KeyboardUtils.hideSoftInput(this);
        AppManager.getAppManager().finishActivity(this);


    }

    @Override
    protected void onPause() {
        super.onPause();
        KeyboardUtils.hideSoftInput(this);
    }

    @Override
    protected void onResume() {
        super.onResume();
        context = this;
        dialog.setCanceledOnTouchOutside(false);
        int alwaysFinish = Settings.Global.getInt(getContentResolver(), Settings.Global.ALWAYS_FINISH_ACTIVITIES, 0);
        if (alwaysFinish == 1) {
            Dialog dialog = null;
            dialog = new AlertDialog.Builder(this)
                    .setMessage(
                            "由于您已开启'不保留活动',导致i呼部分功能无法正常使用.我们建议您点击左下方'设置'按钮,在'开发者选项'中关闭'不保留活动'功能.")
                    .setNegativeButton("取消", new DialogInterface.OnClickListener() {

                        @Override
                        public void onClick(DialogInterface dialog, int which) {
                            dialog.dismiss();
                        }
                    }).setPositiveButton("设置", new DialogInterface.OnClickListener() {

                        @Override
                        public void onClick(DialogInterface dialog, int which) {
                            Intent intent = new Intent(
                                    Settings.ACTION_APPLICATION_DEVELOPMENT_SETTINGS);
                            startActivity(intent);
                        }
                    }).create();
            dialog.show();
        }

        setServiceInfo();
    }


    public void setServiceInfo() {

    }

    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        BaseActivity.context = this;
        super.onActivityResult(requestCode, resultCode, data);
    }

    @Override
    protected void onNewIntent(Intent intent) {
        super.onNewIntent(intent);
        parseIntent(intent);
    }

    /**
     * 七鱼需要
     */
    private void parseIntent(Intent intent) {
        if (intent.hasExtra(NimIntent.EXTRA_NOTIFY_CONTENT)) {
            openService(); //打开客服窗口的方法
            // 最好将intent清掉，以免从堆栈恢复时又打开客服窗口
            setIntent(new Intent());
        }
    }



    public static void openService() {



        if (BaseActivity.value.getIsLogin()) {
            YSFUserInfo userInfo = new YSFUserInfo();
            userInfo.userId = BaseActivity.value.getUserName();
            userInfo.authToken = BaseActivity.value.getToken();
            userInfo.data = "[{\"key\":\"real_name\", \"value\":\"" + BaseActivity.value.getNikeName() + "\"}," +
                    " {\"key\":\"mobile_phone\", \"value\":\"" + BaseActivity.value.getUserName() + "\"}, " +
                    "{\"key\":\"avatar\", \"value\": \"" + BaseActivity.value.getHeadImg() + "\"}]";
            Unicorn.setUserInfo(userInfo);
            /**
             * 设置访客来源，标识访客是从哪个页面发起咨询的，用于客服了解用户是从什么页面进入。
             * 三个参数分别为：来源页面的url，来源页面标题，来源页面额外信息（保留字段，暂时无用）。
             * 设置来源后，在客服会话界面的"用户资料"栏的页面项，可以看到这里设置的值。
             */
            ConsultSource source = new ConsultSource("http://www.baidu.com", "个人中心", "custom information string");
            /**
             * 请注意： 调用该接口前，应先检查Unicorn.isServiceAvailable()，
             * 如果返回为false，该接口不会有任何动作
             *
             * @param context 上下文
             * @param title   聊天窗口的标题
             * @param source  咨询的发起来源，包括发起咨询的url，title，描述信息等
             */
            Unicorn.openServiceActivity(BaseActivity.context, "蜂集市客服", source);
        } else {

            /**
             * 设置访客来源，标识访客是从哪个页面发起咨询的，用于客服了解用户是从什么页面进入。
             * 三个参数分别为：来源页面的url，来源页面标题，来源页面额外信息（保留字段，暂时无用）。
             * 设置来源后，在客服会话界面的"用户资料"栏的页面项，可以看到这里设置的值。
             */
            ConsultSource source = new ConsultSource("http://www.baidu.com", "个人中心", "custom information string");
            /**
             * 请注意： 调用该接口前，应先检查Unicorn.isServiceAvailable()，
             * 如果返回为false，该接口不会有任何动作
             *
             * @param context 上下文
             * @param title   聊天窗口的标题
             * @param source  咨询的发起来源，包括发起咨询的url，title，描述信息等
             */
            Unicorn.openServiceActivity(BaseActivity.context, "蜂集市客服", source);
        }

    }

}
